Canonical CI: grouped-tests.yml + root test/test_groups.toml#154
Conversation
Convert the root test workflow (CI.yml) to the canonical thin caller of
SciML/.github/.github/workflows/grouped-tests.yml@v1, declaring its
group x version matrix once in test/test_groups.toml.
- CI.yml: replace the hand-maintained group x version matrix job with the
reusable grouped-tests.yml caller (coverage:false; on:/triggers preserved
verbatim). Linux-only (no os axis).
- test/test_groups.toml: [Core] on [lts,1,pre] (reproduces the old matrix
exactly) + newly-wired [QA] on [lts,1].
- runtests.jl: add GROUP dispatch (existing suite is Core/All; GROUP==QA runs
the isolated QA env).
- test/qa/{Project.toml,qa.jl}: isolated Aqua + JET environment running
Aqua.test_all(FEniCS) and JET.test_package(FEniCS; target_defined_modules=true).
- Project.toml: raise [compat] julia 1.6 -> 1.10 (LTS floor); add Test = "1"
compat for the test-only extra (benign metadata fixes).
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts caller The grouped-tests conversion dropped the Docker container the pre-conversion CI ran in, so every Core job failed with the FEniCS Python stack missing. Pass it through the new container input of grouped-tests.yml. Depends on SciML/.github#86 merging and a v1 retag. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Pushed 5ec5475 restoring the Docker container the pre-conversion CI ran in: the conversion dropped Dependency / merge ordering: this relies on the new 🤖 Generated with Claude Code |
…input The grouped-tests caller passes container: cmhyett/julia-fenics:latest, which was unsupported by SciML/.github grouped-tests.yml@v1 at the time of the last run (startup_failure on 2026-06-10). v1 now resolves to v1.13.0, which adds the container input, so re-run CI to validate. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts conversion) Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Added the SciMLTesting v1.2 folder-based run_tests harness on top of this grouped-tests conversion; merges as one PR (grouped-tests + SciMLTesting v1.2). |
* Fix QA group dispatch: pass QA via the `qa` kwarg, not `groups` The canonicalization conversion (#154) placed the QA group inside the `groups` Dict, but SciMLTesting's `run_tests` routes `GROUP="QA"` through a dedicated `elseif group == "QA"` branch that consumes the `qa` keyword argument and short-circuits before the `groups` table is ever consulted. With `qa` unset, that branch throws ArgumentError: run_tests: GROUP="QA" was requested but no `qa` body was provided so the QA CI job failed on master before loading FEniCS. Moving the QA spec to the `qa` kwarg (matching the documented SciMLTesting form) makes `GROUP="QA"` reach the QA body, while `all = ["Core"]` keeps QA out of the default `GROUP="All"`/local `]test` run as before. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: re-trigger against SciML/.github v1.15.1 Verify the scoped GitHub-hosted runner routing (SciML/.github #97) now sends this repo's apt-packages/container legs to ubuntu-24.04. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fix FEniCS package-quality (QA) failures surfaced by the QA group The QA group now actually runs FEniCS's own Aqua/JET checks, surfacing six pre-existing package-quality issues. Fix the real causes: - Type piracy + Base.write method ambiguity: `write(path, solution, time::Number)` extended `Base.write` with no FEniCS-owned argument type, which is piracy and also clashed with `Base.write(::IO, x1, xs...)`. Stop importing `write` from Base so `write`/`store` are FEniCS-owned functions (still exported); behavior unchanged. - Undefined export: `export fenicsclass` referenced a nonexistent binding; the macro is `@fenicsclass`. Export the macro. - JET no-matching-method: `Argument(V, number)` lowered to `Argument(::Any, ::Any, ::Nothing)` because `part::StringOrSymbol` cannot accept its own `nothing` default. Widen to `Union{StringOrSymbol, Nothing}`. - Stale dependency: ProgressMeter was declared but unused (only a dead `@require ... using ProgressMeter` no-op). Drop it from deps, compat, and the no-op __init__ block. - deps_compat: add a `[compat]` entry for the LinearAlgebra stdlib. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Keep write/store as Base.write extension; fix piracy+ambiguity via arg types The prior commit removed `write` from the `Base` import to kill the type piracy, but that made `FEniCS.write` a distinct exported binding that clashed with the exported `Base.write` ("both FEniCS and Base export write"), breaking the Core examples (tutorial8/9: `UndefVarError: write`). Restore `import Base: ...write` so `write` stays a single function, and fix the two QA findings on it through argument types instead: - Type piracy: `write` now takes `solution::fenicsobject` (a FEniCS-owned type), so the method is owned by FEniCS rather than pirating Base. The unused, unavoidably-piratical `write(::Any, ::PyObject, ::Number)` overload is dropped (use `store` for raw vectors like `vector(u)`). - Method ambiguity: type `path::PyObject` (what `XDMFFile`/`TimeSeries` return), which is disjoint from `Base.write(::IO, ...)` and `write(::AbstractString, ...)`, removing both ambiguities. `store` is FEniCS-owned (not a Base function), so its overloads are not piracy; `path::PyObject` is added there too for symmetry/correctness. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Converts the root test workflow to the canonical SciML thin-caller pattern:
CI.ymlnow callsSciML/.github/.github/workflows/grouped-tests.yml@v1, and the group × version matrix is declared once in a roottest/test_groups.toml.This is a structural conversion. Tests / Aqua / JET were not run locally; they run in CI.
Changes
.github/workflows/CI.yml— replaced the hand-maintainedgroup × versionmatrix job with the reusablegrouped-tests.yml@v1caller.on:/branch triggers preserved verbatim;secrets: inherit.with: coverage: false(this package never collected coverage). Linux-only, so noosaxis. Other workflows left untouched.test/test_groups.toml(new, repo root) —[Core]on["lts","1","pre"](reproduces the old matrix exactly) plus a newly-wired[QA]on["lts","1"].test/runtests.jl— addedGROUPdispatch (default"All"runs the existing suite as Core;GROUP=="QA"runs the isolated QA environment).test/qa/Project.toml+test/qa/qa.jl(new) — isolated Aqua + JET environment runningAqua.test_all(FEniCS)andJET.test_package(FEniCS; target_defined_modules=true), withFEniCSvia[sources]path.Project.toml— benign metadata fixes: raised[compat] juliafrom1.6to1.10(LTS floor); addedTest = "1"compat for theTesttest-only extra (every[extras]dep now has a[compat]entry).Matrix match
compute_affected_sublibraries.jl … --root-matrixemits:The Core rows reproduce the previous
CI.ymlmatrix (group: [Core]×version: [lts, 1, pre], ubuntu-latest) exactly. QA is newly added.Notes
qa.jl.CI.ymlran the Core suite insidecontainer: cmhyett/julia-fenics:latest(providing the FEniCS Python install via PyCall). The reusabletests.ymlhas nocontainer:input, so the canonical caller cannot reproduce that container; onlyapt-packagesis available and no apt package matches the pinned image. The Core runtime FEniCS provisioning therefore needs a follow-up decision (custom runner image / apt-packages / build step) — flagged here for review. This does not affect the QA group (Aqua/JET are static and don't require FEniCS Python).Ignore until reviewed by @ChrisRackauckas.
🤖 Generated with Claude Code